﻿/*
SINACOR - BMF&Bovespa
Arquivo: MensagemErroRecebida.cs
Criado em: 27-mai-2010 14:09:38
Arquiteto Responsável: p-dmartinelli
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Security.Authorization;

namespace Sinacor.Servico.Bovespa.Alocacao.BusinessLogic 
{
	public class MensagemErroRecebida : BaseBusinessLogic 
	{
		#region Atributos

		private int _erroMovOrdensNaoFechado = 109710;
		private int _erroUsuarioSemPermissao = 109711;
        private ResourceAccess.MensagemErroRecebida _raMensagem;

		#endregion

		#region Propriedades

		public int ErroMovOrdensNaoFechado
		{
			get { return this._erroMovOrdensNaoFechado; }
            set { this._erroMovOrdensNaoFechado = value; }
		}

		public int ErroUsuarioSemPermissao
		{
            get { return this._erroUsuarioSemPermissao; }
            set { this._erroUsuarioSemPermissao = value; }
		}

		#endregion

        #region Construtor

        public MensagemErroRecebida()
        {
            this._raMensagem = new ResourceAccess.MensagemErroRecebida();
        }

        #endregion

        #region Métodos

        #region ConsultarMensagemErroRecebida

        /// <summary>
		/// Pesquisa de Inconsistências de Mensagens Recebidas
		/// </summary>
        /// <param name="filtro">Parâmetro para pesquisar inconsistências de mensagens recebidas</param>
        public List<BusinessEntity.MensagemErroRecebida> ConsultarMensagemErroRecebida(BusinessEntity.Parameter.FiltroMensagemErroRecebida filtro)
		{
            return this._raMensagem.ConsultarMensagemErroRecebida(filtro); ;
        }

        #endregion

        #region ProcessarAcerto

        /// <summary>
		/// Acerta as mensagens de erro de negócios ETF e Recompra
		/// </summary>
		public void ProcessarAcerto()
		{
            Movimento.BusinessEntity.InformacoesMovimento infoMov = new Movimento.BusinessLogic.ControleMovimentoOrdens().ObterInformacoesMovimento(new Movimento.BusinessEntity.DataMovimento());

            if (infoMov != null)
            {
                if (infoMov.EstadoMovimento == Movimento.BusinessEntity.Enum.TipoMovimento.Aberto)
                {
                    if (AuthorizationContext.Current.CheckUserAccess("ORDNIM", "ORD"))
                    {
                        if (this._raMensagem.ExisteMensagemEtf())
                        {
                            this._raMensagem.ProcessarAcertoMensagemEtf(infoMov.DataMovimento);
                        }

                        if (this._raMensagem.ExisteMensagemRecompra())
                        {
                            this._raMensagem.ProcessarAcertoMensagemRecompra(infoMov.DataMovimento);
                        }
                    }
                    else
                    {
                        throw new BusinessException(this._erroUsuarioSemPermissao);
                    }
                }
                else
                {
                    throw new BusinessException(this._erroMovOrdensNaoFechado);
                }
            }
		}

		#endregion

        #endregion    
    }
}